// 重新封装axios

import axios from 'axios'
import store from '@/store'
import jsonBigint from 'json-bigint'
import router from '@/router'
import { Message } from 'element-ui'

// 创建axios实例
const request = axios.create({
  // 基础路劲
  baseURL: 'http://api-toutiao-web.itheima.net',
  timeout: 5000
})

/**
 * 配置处理后端返回数据中超出 js 安全整数范围问题
 */
request.defaults.transformResponse = [function (data) {
  try {
    return jsonBigint.parse(data)
  } catch (err) {
    return data
  }
}]

// 请求拦截器
request.interceptors.request.use(function (config) {
  const { user } = store.state
  if (user) {
    config.headers.Authorization = `Bearer ${user.token}`
  }

  return config
}, function (error) {
  // Do something with request error
  return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(function (response) {
  // 所有响应码为 2xx 的请求都会经过这里
  // 注意：一定要把响应数据 return，否则请求发起的地方拿不到数据
  return response
}, function (error) {
  // 所有响应码除 2xx 之外的所有请求都会经过这里
  const { status } = error.response
  if (status === 401) {
    // 跳转到登录页面
    // 清除本地存储中的用户登录状态
    window.localStorage.removeItem('toutiao-admin-user')
    router.push('/login')
    Message.error('登录状态无效，请重新登录')
  } else if (status === 403) {
    // token 未携带或已过期
    Message({
      type: 'warning',
      message: '没有操作权限'
    })
  } else if (status === 400) {
    // 客户端参数错误
    Message.error('参数错误，请求检查请求参数')
  } else if (status >= 500) {
    Message.error('服务器端内部异常，请稍后重试')
  }
  return Promise.reject(error)
})
// 对外暴露
export default request
